perm filename T10.MAC[IP,NET] blob sn#702349 filedate 1983-03-11 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00006 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE T10
C00003 00003	from COMMON.MAC/147P
C00006 00004	from COMMON.MAC/150P,151P
C00010 00005	from COMDEV.MAC/78P
C00015 00006		END
C00016 ENDMK
C⊗;
	TITLE T10
;This file contains code to adapt TOPS-10 IP/TCP support to WAITS.  Some of
;it is taken from TOPS-10, other parts are rewritten to work on WAITS.
	SEARCH F,S
	$RELOC
	$HIGH

TICSEC::JIFSEC##			;see COMMON.MAC/102P
;from COMMON.MAC/147P

;COMMON SUBROUTINE RETURNS

CPOPJ2::AOS	(P)		;DOUBLE SKIP SUBROUTINE RETURN
CPOPJ1::AOSA	(P)		;SKIP SUBROUTINE RETURN
DPOPJ::	MOVEM	S,DEVIOS(F)	;DEPOSIT I/O STATUS WORD IN DDB
CPOPJ::	POPJ	P,

TPOPJ1::AOSA	-1(P)		;RESTORE T1 THEN SKIP RETURN
TTPOPJ::POP	P,T2
TPOPJ::	POP	P,T1		;RESTORE T1
	POPJ	P,		;AND RETURN
JPOPJ1::			;DUPLICATE NAME (PREFERRED)
IPOPJ1::AOS	-1(P)		;SET FOR SKIP RETURN
JPOPJ::				;DUPLICATE NAME (PREFERRED)
IPOPJ::	POP	P,J		;RESTORE J (USUALLY JOB OR HIGH SEG NUMBER)
	POPJ	P,
T2POJ1::AOS	-1(P)
T2POPJ::POP	P,T2		;RESTORE T2
	POPJ	P,
MPOPJ::	POP	P,M
	POPJ	P,
WPOPJX::CAIA			;NETSER PUSHES THIS ADDR ON THE STACK THEN
WPOPJ1::AOS	-1(P)		; EVENTUALLY DOES A CPOPJ1 RETURN
WPOPJ::	POP	P,W
	POPJ	P,
T3POPJ::POP	P,T3
	POPJ	P,


FUPOJ1::POP	P,F
UPOPJ1::
LPOPJ1::AOSA	-1(P)		;SKIP AND RESTORE LINE
FUPOPJ::POP	P,F
UPOPJ::
LPOPJ::	POP	P,U		;RESTORE LINE AND RETURN
	POPJ	P,0		;RETURN
FPOPJ1::AOS	-1(P)
FPOPJ::	POP	P,F		;RESTORE F
	POPJ	P,0		;RETURN
ZPOPJ::	TDZA	T1,T1
M1POPJ::SETOM	T1
	POPJ	P,

;from COMMON.MAC/200P (PI.ON defined in S.MAC/81P):

ONPOPJ::CONO	PI,PI.ON
	POPJ	P,

;from SCNSER.MAC/29P:

;ROUTINE TO ALLOW SCANNER INTERRUPTS AGAIN AND SKIP RETURN

SONPJ1::AOS	0(P)		;SKIP RETURN
	JRST	SONPPJ##
;from COMMON.MAC/150P,151P

;SUBROUTINES TO SAVE AND RESTORE PRESERVED ACS
;SAVEN IS CALLED AT THE BEGINNING OF A SUBROUTINE
;FOR CONVENIENCE NO MATCHING SUB IS NEEDED TO BE CALLED
;TO RESTORE THIS ACS.
;INSTEAD AN EXTRA RETURN IS PUT ON STACK
;5 CHAR NAME INDICATES IT VIOLATES
;SUBROUTINE CALLING CONVENTIONS
;CALL:	PUSHJ	P,SAVEN
;	RETURN	HERE IMMEDIATELY WITH EXTRA RETURN ON STACK
;	RESPECTS ALL ACS

;NOTE:	THIS CODE USES 1 LOC BEYOND END OF STACK BUT THEN PUSHES ON TOP OF IT
;SO GET OVERFLOW INTERUPT IF TOO FULL.  OK TO DO 1(P) SINCE THIS WORD WRITTEN ON OVERFLOW

	$HIGH
SAVE1::	EXCH	P1,(P)		;SAVE P1, GET CALLER PC
	MOVEM	P1,1(P)		;SAVE CALLER PC ONE BEYOND END
	MOVE	P1,(P)		;RESTORE P1
	PUSHJ	P,@1(P)		;GO BACK TO CALLER, OVERWRITE CALLER PC WITH .+1
	  JRST	RES1
	AOS	-1(P)
	JRST	RES1

SAVE2::	EXCH	P1,(P)		;SAVE P1, GET CALLER PC
	PUSH	P,P2
	MOVEM	P1,1(P)		;SAVE CALLER PC ONE BEYOND END
	MOVE	P1,-1(P)	;RESTORE P1
	PUSHJ	P,@1(P)		;GO BACK TO CALLER, OVERWRITE CALLER PC WITH .+1
	  JRST	RES2
	AOS	-2(P)
	JRST	RES2

SAVE3::	EXCH	P1,(P)		;SAVE P1, GET CALLER PC
	PUSH	P,P2
	PUSH	P,P3
	MOVEM	P1,1(P)		;SAVE CALLER PC ONE BEYOND END
	MOVE	P1,-2(P)	;RESTORE P1
	PUSHJ	P,@1(P)		;GO BACK TO CALLER, OVERWRITE CALLER PC WITH .+1
	  JRST	RES3
	AOS	-3(P)
	JRST	RES3

SAVE4::	EXCH	P1,(P)		;SAVE P1, GET CALLER PC
	PUSH	P,P2
	PUSH	P,P3
	PUSH	P,P4
	MOVEM	P1,1(P)		;SAVE CALLER PC ONE BEYOND END
	MOVE	P1,-3(P)	;RESTORE P1
	PUSHJ	P,@1(P)		;GO BACK TO CALLER, OVERWRITE CALLER PC WITH .+1
	  JRST	RES4
	AOS	-4(P)
RES4:	POP	P,P4
RES3:	POP	P,P3
RES2:	POP	P,P2
P1POPJ::
RES1:	POP	P,P1
	POPJ	P,
;SUBROUTINE TO SAVE AND RESTORE TEMP ACS
;CALLED BY PUSHJ P,SAVT   RETURN EITHER CPOPJ OR CPOPJ1 WHEN THROUGH
SAVT::	EXCH	T4,(P)		;SAVE T4, GET RETURN ADR.
	PUSH	P,T3		;SAVE T3
	PUSH	P,T2		;AND T2
	PUSH	P,T1		;AND T1
	MOVEM	T4,1(P)		;STORE PC
	MOVE	T4,-3(P)	;RESTORE T4
	PUSHJ	P,@1(P)		;RETURN TO CALLER
	  SKIPA			;POPJ RETURN
	AOS	-4(P)		;CPOPJ1 - SET SKIP RETURN
	POP	P,T1		;RESTORE T1
	POP	P,T2		;RESTORE T3 ACS
	POP	P,T3
T4POPJ::POP	P,T4
	POPJ	P,		;AND RETURN

;from COMDEV.MAC/78P

	XP	IMPN,20		;some random values
	XP	ITYN,10
	XP	ARPA.H,0	;Correct for SU-AI
	XP	ARPA.I,11
	XP	ITYFST,200

	SUBTTL	(110) DEFINITIONS AND ENTRY POINTS FOR IMP

IFN FTCIMP,<				;(110)

IFE IMPN,<		;(110) IF NOT LOADING IMP SERVICE, PROVIDE NO-OPS

IMPUUO::IMPSEC::IMPTIK::IMPDEV::	;(110)
TTIDET::IMPTYP::EQIITO::IMPATT::	;(110)
RQTIIO::RQTITO::XMTQIT::IMPRES::	;(110)
	POPJ	P,			;(110)

	XP	.TNWIL,0		;(110)
	XP	.TNWNT,0		;(110)
	XP	.TOFCH,0		;(110)
	XP	MPIINT,0		;(110)
	XP	MPEINT,0		;(110)
	XP	MPPINT,0		;(110)
	XP	.TNIAC,0		;(110)
	XP	.TNAO,0			;(110)
	XP	TELTAB,0		;(110)

IMPISR::REPEAT	10,<POPJ	P,>	;(110) DUMMY ISR ENTRY POINTS
IMPGTT::0				;(110)
	XP	.ISMXL,0		;(110)

> ;END IFE IMPN				;(110)

	$LOW
IMPRQF::0		;(110) IMP REQUEST FLAG. SET WHEN IMP/TTY PROCESSING
			;(110) IS DESIRED AT CLOCK LEVEL
			;(150) ALSO USED TO SIGNAL REQUEST FOR
			;(150) NON-BLOCKING I/O PROCESSING AT
			;(150) CLOCK LEVEL

	$HIGH
;NETWORK SITE HOST ID, FOR USE IN SEND COMMAND
HSTNAM::HSTNAM

;HOST SITE NUMBER, SO CAN IDENTIFY SELF ;(110)
XP THSITE,<<ARPA.H←↑D16>+ARPA.I>	;(222) THE net/HOST/IMP NUMBER

MYSITE::THSITE				;(222) STORE SITE NUMBER HERE
HDSITE==:<THSITE←8>			;(222) THE HOST NUMBER AS IT
					;(222) APPEARS IN A HEADER

IFG IMPN,<				;(110)
	EXTERN	IMPSER,IMPINT		;(110) INSIST ON IMP SERVICE

IFG ITYN-IMPN+1,<PRINTX ?TOO MANY ITYS FOR AVAILABLE IMPS> ;(110)

XP MIMPN,-IMPN		;(110) FOR COUNTERS AND LOOPS
XP MITYN,-ITYN		;(110)
XP ITYOFS,ITYTAB##-ITYFST ;(110) OFFSET TTYTAB )INDEX BY LINE #)
XP ITIMPL,ITYN←9+IMPN	;(110) FOR HOST FUNCTIONS IN IMPUUO

IFNDEF IMPBFN,<		;(110) NUMBER OF IMP BUFFERS (SLIDING SCALE)
	IFLE	IMPN-8,<XP IMPBFN,↑D14*IMPN> ;(110)
	IFG	IMPN-8,<XP IMPBFN,↑D12*IMPN>  ;(110)
>			;(110)

IFNDEF	IMPBFS,<XP IMPBFS,↑D37> ;(110) SIZE OF EACH BUFFER (MUST BE ODD)

XP IMPB36,↑D<<IMPBFN+35>/36>	;(110) 1/36TH NUMBER OF BUFFERS
XP IMPM36,-IMPB36	;(110) NEGATIVE FOR AOBJN COUNTS
XP IMPB%4,IMPBFN/4	;(110) 1/4TH NUMBER OF BUFFERS
XP MMPBFS,-IMPBFS	;(110) NEGATIVE OF BUFFER SIZE
XP MIMBS1,-IMPBFS+1	;(110)
XP MIMBS2,-IMPBFS+2	;(110)
XP IMPTBS,IMPBFN*IMPBFS	;(110) TOTAL WORDS RESERVED FOR IMP BUFFERS

	$LOW
IMPBFT::BLOCK	IMPB36	;(110)IMP BUFFER ALLOCATION TABLE
IMPBUF::0		;(110) POINTER TO FIRST IMP BUFFER
IMPBFE::0		;(110) POINTER PAST END OF IMP BUFFERS

> ;END IFG IMPN		;(110)
> ;END IF N FTCIMP	;(110)

	$HIGH
	END